package com.lzk.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.LocaleResolver;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

/**
 * 配置扩展MVC-视图解析器
 *  -->配置接口访问解析跳转
 */
@Configuration
public class MyMvcConfig implements WebMvcConfigurer {
    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        registry.addViewController("/").setViewName("index");
        registry.addViewController("/index.html").setViewName("index");
        //映射：如果controller返回的请求是"main"，就给他返回到dashboard,html这个页面。
        registry.addViewController("/main.html").setViewName("dashboard");

    }

    /**
     *  1. 自定义的国际化放到Spring IOC容器<bean>中，
     *  此时自定义的国际化就生效了！
     *
     *  2. 此方法就是将自己写的组件配置到Spring容器中，@Bean
     *
     */
    @Bean
    public LocaleResolver localeResolver() {
        return new MyLocalResolver();
    }

    /**
     * 1. 下面步骤四：创建一个拦截器相关的类，
     *      -->实现将刚才写好的拦截器"LoginHandlerInterceptor"注册到Spring的IOC容器中，
     *      -->实现拦截器类对象的容器注入bean
     *
     */
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        //定义排除swagger访问的路径配置
        String[] swaggerExcludes=new String[]{"/swagger-ui.html","/swagger-resources/**","/webjars/**"};
        //拦截器注入容器,并设置某请求拦截，某些请求不拦截
        registry.addInterceptor(new LoginHandlerInterceptor())
                //-->.addPathPatterns("/**")设置拦截所有请求"/**"
                .addPathPatterns("/**")
                /**
                 * -->排除某一些请求不拦截,
                 *   "index.html"：登录页面不拦截，
                 *   "/"：首页不拦截
                 *   "user/login"：登录请求不拦截
                 *
                 *   "/css/*"：静态资源(css,js..)：/css下面的静态资源都放行，不拦截
                 */

                .excludePathPatterns("/index.html","/","/user/login","/css/*","/js/**","/img/**")
                .excludePathPatterns(swaggerExcludes);
    }
}
